const jwt = require('jsonwebtoken')
const fs = require('fs')
const path = require('path')
const multer = require('multer')
const user_db = require('../db/user_db.js')
const jwtConfig = require('../config/jwt.config.js')
const userDB = require('../db/user_db.js')
class user {
	//用户登录
	static userLogin = async (req, res) => {
		const { userName, passWord } = req.body
		const result = await userDB.getUserInfo(userName, 'userName')
		//捕捉错误: 比如数据库连接,数据库查询...
		if(result instanceof Error){
			return res.cc(500, result)
		}
		//查询的用户不存在
		if(result.length === 0){
			return res.cc(404, `${userName}用户不存在!`)
		}
		if(passWord !== result[0].passWord){
			return res.cc(400, '密码错误!')
		}
		// 生成唯一jti（令牌ID)
		const jti = `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
		const token = jwt.sign({...req.body, passWord: '', jti: jti}, jwtConfig.jwtSecret, {expiresIn: jwtConfig.jwtTokenTimeOut})
		return res.cc(200, '登录成功', {token: `Bearer ${token}`,data: {...req.body, passWord: '', jti: jti}})
	}
	
	// 配置文件存储路径和名称
	static storage = multer.diskStorage({
		// 存储目录
		destination: (req, file, cb) => {
			const uploadDir = path.join(__dirname, '../uploads');
			// 确保目录存在
			if (!fs.existsSync(uploadDir)) {
				fs.mkdirSync(uploadDir, { recursive: true });
			}
			cb(null, uploadDir); // 第一个参数为错误信息，第二个为存储路径
		},
		// 文件名处理（避免重名）
		filename: (req, file, cb) => {
			// console.log('req.headers', req.headers);
			// console.log('file', file);
			file.originalname = Buffer.from(file.originalname, 'latin1').toString('utf8');
			// 生成唯一文件名：原文件名 + 时间戳 + 随机数 + 扩展名
			const ext = path.extname(file.originalname); // 获取扩展名
			const baseName = path.basename(file.originalname, ext); // 去除扩展名的文件名
			const uniqueName = `${baseName}-${Date.now()}-${Math.round(Math.random() * 1e9)}${ext}`;
			cb(null, uniqueName);
			
			// const fileName = req.body.fileName
			// const ext = path.extname(fileName); // 获取扩展名
			// const baseName = path.basename(fileName, ext); // 去除扩展名的文件名
			// const uniqueName = `${baseName}-${Date.now()}-${Math.round(Math.random() * 1e9)}${ext}`;
			// cb(null, uniqueName);
		}
	})
	// 创建multer实例
	static multer = multer({
		storage: user.storage, // 使用上面定义的存储配置
		limits: {
			fileSize: 10 * 1024 * 1024 // 限制文件大小为10MB
		},
		// fileFilter: (req, file, cb) => {
		// 	// 可选：过滤文件类型（例如只允许图片）
		// 	console.log('文件类型: ', file.mimetype);
		// 	if (file.mimetype.startsWith('image/')) {
		// 		cb(null, true); // 允许上传
		// 	} else {
		// 		cb(new Error('只允许上传图片文件！'), false); // 拒绝上传
		// 	}
		// }
	})
}

module.exports = user